#pragma once

/* --------------------------------------------- 通讯指令 --------------------------------------------------------*/

#define CMD_HANDSHAKE 0x00
/* ---------- 握手包 ----------
    1. 当设备进入扫描状态后，会向广播地址 FF：FF：FF：FF：FF：FF 发送 握手请求 CMD_HANDSHAKE
    2. 指令长度是本机名字的长度，指令内容就是本机名字
    注意：发送地址的首个字节 为 0XFF , 就是广播地址
 */

#define CMD_HANDSHAKE_ASK 0x01
/* ---------- 握手应答 ----------
    1. 当设备 A 进入扫描状态后，会开启接收，当收到设备 B 广播包后，会关闭广播，转而只向目标地址发送 ASK 应答。
    2. B 设备收到 ASK 应答后，会将设备 A 地址添加到地址队列中
 */

#define CMD_DISCONNECT 0x02
/* ---------- 断开请求 ----------
    1. 当时设备 A 删除某个节点后， 会向对于设备发送端开请求 CMD_DISCONNECT ， 相应设备收到请求后，将删除节点 A
    2. 指令长度为 0
 */

#define CMD_SUSPEND 0x03
/* ---------- 设备挂起 ----------
    1. 当时设备 A 向设备 B 发送失败次数大于最大次数，设备A会将设备B对于节点信息设置成挂起状态 status = 0
    2. 设备A进入休眠时，向所有节点发送挂起指令 CMD_SUSPEND ，其他设备将设备A对于的节点新信息设置成挂起状态 status = 0
    3. 指令长度为 0
 */

#define CMD_ACTIVE 0x04
/* ---------- 设备挂激活 ----------
    1. 当时设备 A 向设备 B 发送成功时，设备A会将设备B对于节点信息设置成激活状态 status = 1
    2. 设备 A 上电 / 重启 / 唤醒后，向所有节点发送激活指令 CMD_ACTIVE ，其他设备将设备A对于的节点新信息设置成激活状态 status = 1
    3. 指令长度为 0
 */

#define CMD_HeartBeat 0x05
/* ---------- 心跳包----------
    1. 当开启心跳功能后, 会每隔一段时间向所有节点发送心跳包, 通过发送回调查看失败次数, 依此来更新设备 激活 / 挂起状态
    2. 接收到心跳包不需要回复
    3. 指令长度为 0
 */

#define CMD_PROMISE 0x06
/* ---------- 承诺指令----------
    1. B 设备收到 A 设备 CMD_PROMISE 必须要进行应答. 否则 A 设备会在每次 B 向 A 发送指令的时候发送重复命令
    2. 如果A设备发送多条数据不一样的 CMD_PROMISE 信息, 只能 B 设备保证响应最后一条
    3. 建议只在一些关键的配置指令使用, 要不会浪费性能
 */

#define CMD_PROMISE_ASK 0x07
/* ---------- 承诺应答----------
    1. B 设备收到 A 设备 CMD_PROMISE 后,需要返回 CMD_PROMISE_ASK 确保收到
    2. 指令长度为 0
 */